﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using QuanLyHocPhi.BLL;
using QuanLyHocPhi.GUI.DuLieu;
using QuanLyHocPhi.Model;
using System.Threading;
using HorizontalAlignment = NPOI.SS.UserModel.HorizontalAlignment;

namespace QuanLyHocPhi.GUI.TacNghiep
{
    public partial class FormThongKeChuyen : FormBase
    {
        #region Variable
        const string DANOP = "Đã nộp";
        const string CHUANOP = "Chưa nộp";
        bool boolDaNop = false;
        bool boolChuaNop = false;
        bool isLoad = true;
        bool isLoadHK = true;
        private bool isLoadKTS = true;
        //DataTable dt;
        private string fileName = "";
        string HKI = "", HKII = "", HKIII = "", HKIV = "", HKV = "";
        decimal[] tongDaNop;
        decimal[] tongCanNop;
        #endregion

        public FormThongKeChuyen()
        {
            InitializeComponent();
            //Load danh sách trường
            CreateColumnChuyen();
            fileName = string.Format("{0}\\TEMPLATES\\MauThongKeChuaNop_Chuyen.xls",
                "D:\\");
        }

        private void FormThongKe_Load(object sender, EventArgs e)
        {
            List<Truong> listTruong = new List<Truong>();
            var khoaGDTC = BizTruong.GetTruongByMaTruong("GDTC");
            listTruong.Add(khoaGDTC);
            cbTruong.DataSource = listTruong;
            cbTruong.DisplayMember = "TenTruong";
            cbTruong.ValueMember = "MaTruong";
            isLoad = false;
            cbTruong_SelectedIndexChanged(sender, e);
        }
        string[] title;
        private void bntThongKe_Click(object sender, EventArgs e)
        {
            tongDaNop = new decimal[10];
            tongCanNop = new decimal[10];
            #region Tiền xử lý
            colHocKiI.HeaderText = "HKI";
            colHKII.HeaderText = "HKII";
            colHKIII.HeaderText = "HKIII";
            colHKIV.HeaderText = "HKIV";
            colHKV.HeaderText = "HKV";
            bdsKhongChuyen.DataSource = null;
            gridKhongChuyen.DataSource = bdsKhongChuyen;
            bntIn.Enabled = false;
            #endregion

            #region Kiểm tra tính hợp lệ của dữ liệu đầu vào
            if (cbTruong.SelectedIndex == -1)
            {
                MessageBox.Show("Danh sách trường rỗng", "Thông báo", MessageBoxButtons.OK);
                return;
            }
            if (cbKhoaTuyenSinh.SelectedIndex == -1)
            {
                MessageBox.Show("Danh sách khóa tuyển sinh rỗng", "Thông báo", MessageBoxButtons.OK);
                return;
            }
            int result = 0;
            if (int.TryParse(cbKhoaTuyenSinh.SelectedText, out result))
            {
                MessageBox.Show("Khóa tuyển sinh không hợp lệ", "Thông báo", MessageBoxButtons.OK);
                return;
            }
            #endregion

            #region Lấy thông tin trên form
            var maTruong = cbTruong.SelectedValue.ToString();
            var namTuyenSinh = int.Parse(cbKhoaTuyenSinh.Text);
            boolDaNop = rdDaNop.Checked;
            boolChuaNop = rdChuaNop.Checked;
            #endregion

            #region Lấy danh sách sinh viên
            //var listDanhSachSinhVien = BizSinhVien.GetListSinhVienKhongChuyen(maTruong, namTuyenSinh);
            //listDanhSachSinhVien.OrderByDescending(t => t.LopHocPhan_SinhVienCollection.Count);
            string nam = "HK{0}/{1}-{2}";
            title = new string[9]{
                                 string.Format(nam,"I",namTuyenSinh,namTuyenSinh+1),
                                 string.Format(nam,"II",namTuyenSinh,namTuyenSinh+1),
                                 string.Format(nam,"I",namTuyenSinh+1,namTuyenSinh+2),
                                 string.Format(nam,"II",namTuyenSinh+1,namTuyenSinh+2),
                                 string.Format(nam,"I",namTuyenSinh+2,namTuyenSinh+3),
                                 string.Format(nam,"II",namTuyenSinh+2,namTuyenSinh+3),
                                 string.Format(nam,"I",namTuyenSinh+3,namTuyenSinh+4),
                                 string.Format(nam,"II",namTuyenSinh+3,namTuyenSinh+4),
                                 string.Format(nam,"I",namTuyenSinh+4,namTuyenSinh+5)
                             };
            #endregion
            int colFrom = (int)fromHocKy.Value;
            int colTo = (int)toHocKy.Value;
            List<ThongKe> dsThongKe = new List<ThongKe>();
            #region Thread xử lý dữ liệu
            FormProgress frm = new FormProgress();
            frm.DoWork += delegate(object oSender, DoWorkEventArgs oE)
            {
                #region Đưa dữ liệu lên grid


                //int tongSo = 0;
                //Lop lop = new Lop();
                //int fromHK = (int)fromHocKy.Value;
                //fromHK = fromHK < 1 ? 1 : fromHK;
                //int toHK = (int)toHocKy.Value;
                //toHK = toHK > 9 ? 9 : toHK;
                //foreach (var item in listDanhSachSinhVien)
                //{
                //    #region Hiển thị thông tin sinh viên
                //    var lstLopHP_SV = BizSinhVien.GetListLopHP_SV(item.MaSinhVien);
                //    if (lstLopHP_SV == null || lstLopHP_SV.Count == 0)
                //        continue;

                //    tongSo += 1;
                //    DataRow row = dt.NewRow();
                //    row["STT"] = tongSo.ToString();
                //    row["MaSinhVien"] = item.MaSinhVien;
                //    row["Ho"] = item.HoDem;
                //    row["Ten"] = item.Ten;
                //    if (item.KC_MaLop != lop.MaLop)
                //    {
                //        lop = BizLopGoc.GetLopByMaLop(item.KC_MaLop);
                //    }
                //    if (lop != null)
                //        row["LopGoc"] = lop.TenLop;
                //    #endregion

                //    #region Xử lý các học kỳ
                //    decimal[] arrDaNop = new decimal[10];
                //    decimal[] arrTongTien = new decimal[10];
                //    bool[] mien = new bool[10];
                //    string ghiChu = "";
                //    for (int i = 0; i < lstLopHP_SV.Count; i++)
                //    {
                //        decimal tongTien = 0;
                //        decimal daNop = 0;
                //        LopHocPhan_SinhVien lhp_sv = lstLopHP_SV[i];
                //        int hk = Col(lhp_sv.LopHocPhan.HocKy.NamHoc, lhp_sv.LopHocPhan.HocKy.SoHieuHocKy);
                //        decimal hocPhiThucTe = lhp_sv.LopHocPhan.HocPhiThucTe;
                //        if (!string.IsNullOrEmpty(lhp_sv.GhiChu))
                //            if (string.IsNullOrEmpty(ghiChu))
                //                ghiChu = lhp_sv.GhiChu;
                //            else
                //                ghiChu += ";" + lhp_sv.GhiChu;
                //        #region Lấy tổng tiền cần nộp và số  tiền đã nộp cho mỗi môn học đăng ký
                //        if (hk >= 9)
                //        {
                //            if (hocPhiThucTe < lhp_sv.LopHocPhan.HocPhi)
                //                hocPhiThucTe += lhp_sv.LopHocPhan.HocKy.PhuThuKhongChuyen;
                //        }
                //        if (string.IsNullOrEmpty(lhp_sv.MaPhieuThu))
                //        {
                //            if (lhp_sv.HeSoMienGiam != 1)
                //                tongTien = getHocPhi(hocPhiThucTe, lhp_sv.HeSoMienGiam);
                //        }
                //        else
                //        {
                //            var pt = BizPhieuThu.GetPhieuThu(lhp_sv.MaPhieuThu);
                //            if (pt != null)
                //            {
                //                tongTien = getHocPhi(hocPhiThucTe, lhp_sv.HeSoMienGiam);
                //                daNop = pt.SoTien;
                //            }
                //            else
                //                BizPhieuThu.Delete(pt);
                //        }
                //        #endregion

                //        if (lhp_sv.HeSoMienGiam == 1)
                //            mien[hk] = true;
                //        switch (hk)
                //        {
                //            case 1:
                //                arrDaNop[1] += daNop;
                //                arrTongTien[1] += tongTien;
                //                break;
                //            case 2:
                //                arrDaNop[2] += daNop;
                //                arrTongTien[2] += tongTien;
                //                break;
                //            case 3:
                //                arrDaNop[3] += daNop;
                //                arrTongTien[3] += tongTien;
                //                break;
                //            case 4:
                //                arrDaNop[4] += daNop;
                //                arrTongTien[4] += tongTien;
                //                break;
                //            case 5:
                //                arrDaNop[5] += daNop;
                //                arrTongTien[5] += tongTien;
                //                break;
                //            case 6:
                //                arrDaNop[6] += daNop;
                //                arrTongTien[6] += tongTien;
                //                break;
                //            case 7:
                //                arrDaNop[7] += daNop;
                //                arrTongTien[7] += tongTien;
                //                break;
                //            case 8:
                //                arrDaNop[8] += daNop;
                //                arrTongTien[8] += tongTien;
                //                break;
                //            case 9:
                //                arrDaNop[9] += daNop;
                //                arrTongTien[9] += tongTien;
                //                break;
                //            default:
                //                arrDaNop[9] += daNop;
                //                arrTongTien[9] += tongTien;
                //                break;
                //        }
                //    }
                //    #region Đưa thông tin số tiền = Đã Nộp/Tổng tiền của các  học kỳ
                //    bool choIn = true;
                //    bool checkRemain = true;
                //    for (int i = fromHK; i <= toHK; i++)
                //    {
                //        if (checkRemain)
                //        {
                //            if (boolDaNop)
                //            {
                //                if (arrTongTien[i] == 0 || (arrTongTien[i] > arrDaNop[i]) || (arrDaNop[i] == 0))
                //                {
                //                    if (mien[i] == false)
                //                    {
                //                        choIn = false;
                //                        break;
                //                    }
                //                }
                //            }
                //            else if (boolChuaNop)
                //            {
                //                if (arrTongTien[i] == 0 || (arrTongTien[i] > arrDaNop[i]) || (arrDaNop[i] == 0))
                //                {
                //                    if (mien[i] == false)
                //                    {
                //                        choIn = true;
                //                        checkRemain = false;
                //                    }
                //                    else
                //                        choIn = false;
                //                }
                //                else
                //                    choIn = false;
                //            }
                //        }
                //        string key = "HKI";
                //        string data = "";

                //        //Chưa đăng ký môn học trong học kỳ
                //        if (arrTongTien[i] == 0 && arrDaNop[i] == 0)
                //            if (mien[i])
                //                data = "Miễn";
                //            else
                //                data = "[CĐK]";
                //        else if (boolChuaNop && arrDaNop[i] == arrTongTien[i])
                //            data = "";
                //        else
                //            data = string.Format("{0}/{1}", arrDaNop[i].ToString().FormatCurrency(), arrTongTien[i].ToString().FormatCurrency());
                //        switch (i)
                //        {
                //            case 1:
                //                key = "HKI";
                //                break;
                //            case 2:
                //                key = "HKII";
                //                break;
                //            case 3:
                //                key = "HKIII";
                //                break;
                //            case 4:
                //                key = "HKIV";
                //                break;
                //            case 5:
                //                key = "HKV";
                //                break;
                //            case 6:
                //                key = "HKVI";
                //                break;
                //            case 7:
                //                key = "HKVII";
                //                break;
                //            case 8:
                //                key = "HKVIII";
                //                break;
                //            case 9:
                //                key = "HKIX";
                //                break;
                //        }
                //        row[key] = data;
                //    }
                //    #endregion

                //    #endregion
                //    row["GhiChu"] = ghiChu;
                //    if (choIn)
                //    {
                //        for (int i = fromHK; i <= toHK; i++)
                //        {
                //            tongCanNop[i - 1] += arrTongTien[i];
                //            tongDaNop[i - 1] += arrDaNop[i];
                //        }
                //        dt.Rows.Add(row);
                //    }
                //}
                #endregion

                dsThongKe = BizPhieuThu.GetThongKe(title, maTruong, namTuyenSinh, rdChuaNop.Checked ? 1 : rdDaNop.Checked ? 2 : 3, colFrom, colTo, ref tongCanNop, ref tongDaNop, LoaiSinhVien.SinhVienChuyenNganh);
            };
            frm.RunWorkerCompleted += delegate(object oSender, RunWorkerCompletedEventArgs oE)
            {
                if (oE.Error != null)
                {
                    string msg = oE.Error.Message;
                    if (oE.Error.InnerException != null)
                        msg += oE.Error.InnerException.Message;
                    DialogUtils.ShowError(msg);
                }

            };
            frm.StartWorking(this);
            #endregion

            #region Thiết lập lại các thuộc tính của các control trên form
            bdsKhongChuyen.DataSource = dsThongKe;
            if (dsThongKe.Count() > 0)
            {
                lbTongSo.Text = string.Format("Tổng số sinh viên: {0}", dsThongKe.Count);
                gridKhongChuyen.ReadOnly = true;
                gridKhongChuyen.AllowUserToAddRows = false;
                gridKhongChuyen.AllowUserToDeleteRows = false;
                bntIn.Enabled = true;
            }
            else
            {
                gridKhongChuyen.ReadOnly = false;
                gridKhongChuyen.AllowUserToAddRows = true;
                gridKhongChuyen.AllowUserToDeleteRows = true;
            }
            colHocKiI.HeaderText = title[0];
            colHKII.HeaderText = title[1];
            colHKIII.HeaderText = title[2];
            colHKIV.HeaderText = title[3];
            colHKV.HeaderText = title[4];
            colHKVI.HeaderText = title[5];
            colHKVII.HeaderText = title[6];
            colHKVIII.HeaderText = title[7];
            colHKIX.HeaderText = title[8];
            lbHKI.Text = string.Format("{0}: {1}/{2}", title[0], tongDaNop[1].ToString().FormatCurrency(), tongCanNop[1].ToString().FormatCurrency());
            lbHKII.Text = string.Format("{0}: {1}/{2}", title[1], tongDaNop[2].ToString().FormatCurrency(), tongCanNop[2].ToString().FormatCurrency());
            lbHKIII.Text = string.Format("{0}: {1}/{2}", title[2], tongDaNop[3].ToString().FormatCurrency(), tongCanNop[3].ToString().FormatCurrency());
            lbHKIV.Text = string.Format("{0}: {1}/{2}", title[3], tongDaNop[4].ToString().FormatCurrency(), tongCanNop[4].ToString().FormatCurrency());
            lbHKV.Text = string.Format("{0}: {1}/{2}", title[4], tongDaNop[5].ToString().FormatCurrency(), tongCanNop[5].ToString().FormatCurrency());

            lbHKVI.Text = string.Format("{0}: {1}/{2}", title[5], tongDaNop[6].ToString().FormatCurrency(), tongCanNop[6].ToString().FormatCurrency());
            lbHKVII.Text = string.Format("{0}: {1}/{2}", title[6], tongDaNop[7].ToString().FormatCurrency(), tongCanNop[7].ToString().FormatCurrency());
            lbHKVIII.Text = string.Format("{0}: {1}/{2}", title[7], tongDaNop[8].ToString().FormatCurrency(), tongCanNop[8].ToString().FormatCurrency());
            lbHKIX.Text = string.Format("{0}: {1}/{2}", title[8], tongDaNop[9].ToString().FormatCurrency(), tongCanNop[9].ToString().FormatCurrency());

            gridKhongChuyen.DataSource = bdsKhongChuyen;
            #endregion
        }

        private void cbTruong_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!isLoad)
            {
                isLoadKTS = true;
                var listKhoaTuyenSinh = BizLopGoc.GetList_KhoaTuyenSinh(cbTruong.SelectedValue.ToString());
                cbKhoaTuyenSinh.DataSource = listKhoaTuyenSinh;
                isLoadKTS = false;
            }
        }

        private void bntIn_Click(object sender, EventArgs e)
        {
            #region Tiền xử lý
            if (!File.Exists(fileName))
            {
                MessageBox.Show("File mẫu MauThongKeChuaNop_Chuyen.xls không tồn tại", "Lỗi");
                return;
            }
            FileStream fs = null;
            try
            {
                fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            }
            catch (Exception)
            {
                MessageBox.Show("File mẫu đang mở. Vui lòng đóng lại trước khi tiếp tục", "Lỗi");
                return;
            }
            #endregion

            #region Lấy dữ liệu từ grid và form
            var danhSachSinhVien = bdsKhongChuyen.DataSource as List<ThongKe>;
            //DataTable danhSachSinhVien = (DataTable)bdsKhongChuyen.DataSource;
            var tenTruong = cbTruong.Text.ToString().ToUpper();
            var namTuyenSinh = cbKhoaTuyenSinh.Text;
            #endregion

            #region Làm việc với file excel
            FormProgress frm = new FormProgress();
            frm.DoWork += delegate(object oSender, DoWorkEventArgs oE)
            {
                HSSFWorkbook templateWorkbook = new HSSFWorkbook(fs, true);

                #region Tạo style cho phần hiển thị tên trường, tên khóa
                var titleCellStyle = templateWorkbook.CreateCellStyle();
                titleCellStyle.Alignment = HorizontalAlignment.CENTER;
                var titleFont = templateWorkbook.CreateFont();
                titleFont.Boldweight = (short)FontBoldWeight.BOLD;
                titleFont.FontHeight = 236;
                titleFont.FontName = "Times New Roman";
                titleCellStyle.SetFont(titleFont);
                #endregion

                #region Tạo các style cho phần hiển thị nội dung
                var detailCellStyle = templateWorkbook.CreateCellStyle();
                detailCellStyle.Alignment = HorizontalAlignment.CENTER;
                detailCellStyle.BorderBottom = CellBorderType.DASHED;
                detailCellStyle.BorderLeft = CellBorderType.THIN;
                detailCellStyle.BorderRight = CellBorderType.THIN;
                var cellHoStyle = templateWorkbook.CreateCellStyle();
                cellHoStyle.BorderBottom = CellBorderType.DASHED;
                cellHoStyle.BorderLeft = CellBorderType.THIN;
                var cellTenStyle = templateWorkbook.CreateCellStyle();
                cellTenStyle.BorderBottom = CellBorderType.DASHED;
                cellTenStyle.BorderRight = CellBorderType.THIN;

                var detailCellStyleEnd = templateWorkbook.CreateCellStyle();
                detailCellStyleEnd.Alignment = HorizontalAlignment.CENTER;
                detailCellStyleEnd.BorderBottom = CellBorderType.THIN;
                detailCellStyleEnd.BorderLeft = CellBorderType.THIN;
                detailCellStyleEnd.BorderRight = CellBorderType.THIN;
                var cellHoStyleEnd = templateWorkbook.CreateCellStyle();
                cellHoStyleEnd.BorderBottom = CellBorderType.THIN;
                cellHoStyleEnd.BorderLeft = CellBorderType.THIN;
                var cellTenStyleEnd = templateWorkbook.CreateCellStyle();
                cellTenStyleEnd.BorderBottom = CellBorderType.THIN;
                cellTenStyleEnd.BorderRight = CellBorderType.THIN;

                var cellTongSoStyle = templateWorkbook.CreateCellStyle();
                var fontCellTongSo = templateWorkbook.CreateFont();
                fontCellTongSo.IsItalic = true;
                cellTongSoStyle.SetFont(fontCellTongSo);
                var cellBottomStyle = templateWorkbook.CreateCellStyle();
                cellBottomStyle.Alignment = HorizontalAlignment.CENTER;
                var fontCellBottomStyle = templateWorkbook.CreateFont();
                fontCellBottomStyle.Boldweight = (short)FontBoldWeight.BOLD;
                cellBottomStyle.SetFont(fontCellBottomStyle);
                #endregion

                #region Khởi tạo
                var sheet = templateWorkbook.GetSheet("sheet1");
                var indexRow = 5;
                var soLuongSinhVien = danhSachSinhVien.Count;
                var row = sheet.CreateRow(3);
                #endregion

                #region Chèn phần tên trường và tên khóa
                var cell = row.CreateCell(0);
                cell.SetCellValue(tenTruong + " - " + "KHÓA TUYỂN SINH " + namTuyenSinh);
                cell.CellStyle = titleCellStyle;
                #endregion

                #region Chỉnh tiêu đề danh sách
                if (rdDaNop.Checked)
                {
                    row = sheet.GetRow(2);
                    cell = row.GetCell(0);
                    cell.SetCellValue("DANH SÁCH ĐÃ NỘP HỌC PHÍ");
                    cell.CellStyle = titleCellStyle;
                }
                if (rdCH.Checked)
                {
                    row = sheet.GetRow(2);
                    cell = row.GetCell(0);
                    cell.SetCellValue("DANH SÁCH NỘP HỌC PHÍ");
                    cell.CellStyle = titleCellStyle;
                }
                #endregion

                #region Chỉnh lại nội dung tiêu đề (Các học kỳ)
                row = sheet.GetRow(5);
                cell = row.GetCell(5);
                cell.SetCellValue(title[0]);
                cell = row.GetCell(6);
                cell.SetCellValue(title[1]);
                cell = row.GetCell(7);
                cell.SetCellValue(title[2]);
                cell = row.GetCell(8);
                cell.SetCellValue(title[3]);
                cell = row.GetCell(9);
                cell.SetCellValue(title[4]);

                cell = row.GetCell(10);
                cell.SetCellValue(title[5]);
                cell = row.GetCell(11);
                cell.SetCellValue(title[6]);
                cell = row.GetCell(12);
                cell.SetCellValue(title[7]);
                cell = row.GetCell(13);
                cell.SetCellValue(title[8]);
                #endregion

                #region Chèn nội dung danh sách sinh viên
                for (int j = 0; j < soLuongSinhVien; j++)
                {
                    ThongKe dtRow = danhSachSinhVien[j];

                    row = sheet.CreateRow(j + 6);
                    //for (int k = 0; k <= 14; k++)
                    //{
                    //    cell = row.CreateCell(k);
                    //    cell.SetCellValue(dtRow[k] != null ? dtRow[k].ToString() : "");
                    //    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    //}

                    cell = row.CreateCell(0);
                    cell.SetCellValue((j + 1).ToString());
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(1);
                    cell.SetCellValue(dtRow.MaSinhVien);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(2);
                    cell.SetCellValue(dtRow.Ho);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(3);
                    cell.SetCellValue(dtRow.Ten);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(4);
                    cell.SetCellValue(dtRow.LopGoc);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(5);
                    cell.SetCellValue(dtRow.HKI);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(6);
                    cell.SetCellValue(dtRow.HKII);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(7);
                    cell.SetCellValue(dtRow.HKIII);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(8);
                    cell.SetCellValue(dtRow.HKIV);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(9);
                    cell.SetCellValue(dtRow.HKV);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(10);
                    cell.SetCellValue(dtRow.HKVI);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(11);
                    cell.SetCellValue(dtRow.HKVII);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(12);
                    cell.SetCellValue(dtRow.HKVIII);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;

                    cell = row.CreateCell(13);
                    cell.SetCellValue(dtRow.HKIX);
                    cell.CellStyle = (j == (soLuongSinhVien - 1)) ? detailCellStyleEnd : detailCellStyle;
                }
                #endregion


                #region Chèn phần bottom
                indexRow = soLuongSinhVien + 6;
                row = sheet.CreateRow(indexRow);
                cell = row.CreateCell(0);
                cell.SetCellValue(string.Format("(Danh sách gồm {0} sinh viên)", soLuongSinhVien));
                cell.CellStyle = cellTongSoStyle;
                indexRow += 1;
                row = sheet.CreateRow(indexRow);
                cell = row.CreateCell(5);
                cell.SetCellValue("Huế, " + string.Format("{0:dd/MM/yyyy}", DateTime.Now).DateToText());
                cell.CellStyle = cellTongSoStyle;
                indexRow += 1;
                row = sheet.CreateRow(indexRow);
                cell = row.CreateCell(2);
                cell.SetCellValue("Kế toán trưởng");
                cell.CellStyle = cellBottomStyle;
                cell = row.CreateCell(6);
                cell.SetCellValue("CB theo dõi");
                cell.CellStyle = cellBottomStyle;
                indexRow += 4;
                row = sheet.CreateRow(indexRow);
                cell = row.CreateCell(2);
                cell.SetCellValue("Nguyễn Cường");
                cell.CellStyle = cellBottomStyle;
                cell = row.CreateCell(6);
                cell.SetCellValue("Nguyễn Thị Phương");
                cell.CellStyle = cellBottomStyle;
                #endregion

                #region Lưu ra file Excel mới
                sheet.ForceFormulaRecalculation = true;
                //var tenfile = string.Format("C:\\TheChat\\{0}_{1}.xls", tenTruong, namTuyenSinh);
                var tenfile = string.Format("{0}\\{1}_{2}.xls", Application.StartupPath, tenTruong, namTuyenSinh);
                try
                {
                    using (var fileData = new FileStream(tenfile, FileMode.Create))
                    {
                        templateWorkbook.Write(fileData);
                        fileData.Close();

                        #region Excel commented
                        //Mở file excel
                        //var xlApp = new Excel.Application();
                        //object misValue = System.Reflection.Missing.Value;
                        //var xlWorkBook = xlApp.Workbooks.Open(tenfile,
                        //                                      Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                        //                                      Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                        //                                      Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                        //                                      Type.Missing, Type.Missing);
                        //xlApp.Visible = true;
                        #endregion

                        System.Diagnostics.Process.Start(tenfile);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("Bạn đang mở file " + tenfile + ". Vui lòng đóng lại trước khi tiếp tục. " + ex.ToString());
                }
                fs.Close();
                #endregion
            };
            #endregion

            #region On complete
            frm.RunWorkerCompleted += delegate(object oSender, RunWorkerCompletedEventArgs oE)
                {
                    if (oE.Error != null)
                    {
                        string msg = oE.Error.Message;
                        if (oE.Error.InnerException != null)
                            msg += oE.Error.InnerException.Message;
                        DialogUtils.ShowError(msg);
                    }

                };
            #endregion

            frm.StartWorking(this);
        }

        void CreateColumnChuyen()
        {
            colSTT.DataPropertyName = "STT";
            colMaSinhVien.DataPropertyName = "MaSinhVien";
            colHo.DataPropertyName = "Ho";
            colTen.DataPropertyName = "Ten";
            colLopGoc.DataPropertyName = "LopGoc";
            colHocKiI.DataPropertyName = "HKI";
            colHKII.DataPropertyName = "HKII";
            colHKIII.DataPropertyName = "HKIII";
            colHKIV.DataPropertyName = "HKIV";
            colHKV.DataPropertyName = "HKV";
            colGhiChu.DataPropertyName = "GhiChu";
            colHKVI.DataPropertyName = "HKVI";
            colHKVII.DataPropertyName = "HKVII";
            colHKVIII.DataPropertyName = "HKVIII";
            colHKIX.DataPropertyName = "HKIX";
            gridKhongChuyen.AutoGenerateColumns = false;
        }
    }
}


